from django.db import models


# Create your models here.
# 接口表
class Interface(models.Model):
    name = models.CharField(max_length=100)  # 接口名称
    url = models.URLField()  # 接口URL

    class Meta:
        db_table = "interface"
        verbose_name_plural = "接口表"

    def __str__(self):
        return self.name


# 资源表模型
class Resource(models.Model):
    name = models.CharField(max_length=100)
    url = models.URLField(null=True)  # 资源对应的URL
    pid = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)  # 自关联，用于表示层级关系，可为空
    interface = models.ManyToManyField(Interface)  # 多对多关系，表示资源拥有哪些接口
    # 位运算字段
    permission = models.IntegerField(null=True)  # 资源的权限值

    def __str__(self):
        return self.name


# 角色表
class Role(models.Model):
    name = models.CharField(max_length=50)  # 例如 '管理员'、'财务'、'人事' 等
    pid = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)  # 自关联，用于表示层级关系，可为空
    type = models.SmallIntegerField(null=True)  # 例如 1 表示管理员，2 表示普通用户等
    resources = models.ManyToManyField(Resource)  # 多对多关系，表示角色拥有哪些资源
    # 位运算字段
    permission = models.IntegerField(null=True)  # 角色的权限值

    def __str__(self):
        return self.name

# 部门表
class Department(models.Model):
    name = models.CharField(max_length=100, unique=True)  # 部门名称，例如 '技术部'、'市场部' 等

    def __str__(self):
        return self.name

# 职位表
class Position(models.Model):
    name = models.CharField(max_length=100, unique=True)  # 职位名称，例如 '工程师'、'经理' 等

    def __str__(self):
        return self.name

# 管理员表模型
class Admin(models.Model):
    name = models.CharField(max_length=100, unique=True)  # 如 '张三'、'小明' 等
    password = models.CharField(max_length=100)  # 密码
    role = models.ForeignKey(Role, on_delete=models.CASCADE)  # 外键，关联角色表
    department = models.ForeignKey(Department, null=True, on_delete=models.CASCADE)  # 外键，关联部门表
    position = models.ForeignKey(Position, null=True, on_delete=models.CASCADE)  # 外键，关联职位表

    class Meta:
        db_table = "admin"
        verbose_name_plural = "管理员表"

    def __str__(self):
        return self.name

# 资源互斥表
class ResourceMutex(models.Model):
    resource1 = models.ForeignKey(Resource, on_delete=models.CASCADE, related_name='resource1')  # 资源1
    resource2 = models.ForeignKey(Resource, on_delete=models.CASCADE, related_name='resource2')  # 资源2

    class Meta:
        db_table = "resource_mutex"
        verbose_name_plural = "资源互斥表"

    def __str__(self):
        return f"{self.resource1} - {self.resource2}"
